// union

#include <stdio.h>

union AnElt
{
    int i;
    char c;
} elt1, elt2;

typedef union
{
    int i;
    char ch[sizeof(int)];
} CHI;

int main(int argc, char const *argv[])
{
    // sizeof(union) = max(sizeof(每个成员))
    printf("sizeof(elt1) = %d\n", sizeof(elt1));
    printf("%d\n", sizeof(union AnElt));

    // union
    // 存储
    // - 所有成员共享一个空间 -> 写新的会把旧的盖掉
    // - 同一时间只有一个成员是有效的
    // - union的大小是其最大的成员
    // 初始化
    // - 对第一个成员做初始化

    CHI chi;
    int i;
    chi.i = 1234;
    for (i = 0; i < sizeof(int); i++)
    {
        // x86的CPU是小端的
        // 高位在高地址,低位在低地址
        printf("%02hhX", chi.ch[i]);
        // 02 : 以 0 补齐两位数
        // hhX: 只输出 2 位数,超过就显示实际的数
    }
    printf("\n");
    // 可以获得数据内部的每一个字节
    // 读写文件?
    
    return 0;
}